Jump to content

Performance - Latency and Throughput

From RidgeRun Developer Wiki

Follow us on: YouTube Twitter LinkedIn Email Share this page

Share This Page


Preferred Partner Logo 3 Partner Program Banner





Compiler Performance Comparison

The following measurements compare PVA ISP processing times using kernels compiled with the Synopsys ASIP Programmer and NVIDIA NVVPU compiler. The comparison covers standalone algorithms, joined-kernel stages, and a complete ISP pipeline. These measurements are separate from the GStreamer pipeline results presented later on this page.

All measurements use 1920 × 1080 input images. Lower processing times indicate faster execution. The latency ratio (NVVPU / Synopsys) compares the NVVPU execution time with the Synopsys execution time. A value above 1.00× indicates higher latency with NVVPU, while a value below 1.00× indicates lower latency.

Algorithm Orin Thor
Synopsys (µs) NVVPU (µs) Latency Ratio (NVVPU / Synopsys) NVVPU (µs)
Standalone algorithms
Decompand 292.406 292.136 1.00× 298.283
Black Level Correction 352.935 315.982 0.90× 313.854
Histogram 237.774 236.692 1.00× 248.495
White Balance 290.607 291.384 1.00× 156.179
Demosaic 1,655.110 2,287.890 1.38× 2,511.010
Convolution1 1,097.560 2,719.460 2.48× 3,092.540
Color Correction Matrix 844.084 845.747 1.00× 852.053
Global Tone Mapping 1,312.170 1,462.170 1.11× 1,685.430
DLUT Global Tone Mapping 666.179 774.060 1.16× 987.716
Gamma Tone Mapping 447.388 447.290 1.00× 398.180
NV12 Conversion 437.965 577.020 1.32× 653.095
Joined-kernel stages
Joined Decompand + BLC 675.461 505.424 0.75× 666.609
Joined White Balance + Demosaic 1,828.040 3,195.950 1.75× 3,533.180
Joined Convolution + CCM1 1,644.140 3,364.500 2.05× 3,815.530
Joined GTM + Gamma + NV12 1,728.390 2,227.360 1.29× 2,490.290
Joined GTM DLUT + Gamma + NV12 1,127.020 1,703.960 1.51× 1,872.440
Complete pipeline
Total ISP pipeline2 4,442.000 6,366.000 1.43× 8,293.000


  • 1 Scene-key computation is included in these Convolution kernel measurements.
  • 2 The full-pipeline measurement uses a joined-kernel pipeline excluding optional stages.

For the joined-kernel ISP pipeline with optional stages excluded, the measured processing time was 4.442 ms with Synopsys and 6.366 ms with NVVPU, corresponding to a latency ratio of 1.43×. This is a separately measured pipeline result and should not be calculated by summing the individual kernel times.

File-fed GStreamer Performance Measurements

These measurements use a repeated Bayer RAW frame as input to the PVA ISP GStreamer element, with optional conversion of the NV12 output to NVMM memory. The live-camera measurements later on this page use a different setup and report processing time and FPS rather than the source-to-sink interlatency measured here.

Benchmark Setup

Component Configuration
Board NVIDIA Jetson AGX Orin Developer Kit.
Software Jetson Linux R36.5.0, Linux 5.15.185-tegra, GStreamer 1.20.3, and GstShark 0.9.1.
ISP integration pvaisp and pvacudaupload GStreamer elements, version 1.0.0. The tested libpva_isp.so has SHA-256 9cdf9cc38e305f6bfbe93ac5eb076c67b1e954de0c72570437ce826356d072b7.
ISP parameters params-reference.yaml supplied with the GStreamer element. The Bayer pattern is BGGR with bpp=12 in the input caps. Optional convolution and color correction stages are disabled. V4L2 auto-exposure control writes are disabled.
Inputs One 1920 × 1080 Bayer frame in 16-bit words (80.raw), repeated by multifilesrc. The 3840 × 2160 input was made by tiling that frame twice horizontally and vertically.
Sink fakesink sync=false. The caps declare a 30/1 frame rate, but file reading and output are not paced to 30 FPS.

The stock nvpmodel profiles used for these measurements are listed below. Clock figures are maximum rates. For power-mode details, see Performance Tuning on the PVA.

Power mode Active CPU cores PVA VPS maximum (MHz) PVA AXI maximum (MHz)
MAXN 12 1,369.6 985.6
MODE_50W 12 704.0 486.4
MODE_30W 8 512.0 358.4
MODE_15W 4 307.2 217.6

Measurement Method

Two runs were recorded for each combination of power mode, resolution, and pipeline. Each 1080p run processed 800 frames and excluded the first 20 frame records from processing-time and interlatency calculations. Each 4K run processed 240 frames and excluded the first 10. GstShark's proctime tracer measured per-frame processing time inside each named element. Its interlatency tracer measured the elapsed time for the same buffer from multifilesrc0_src to fakesink0_sink. This source-to-sink measurement includes time spent waiting in the queue, where present. It does not include file reading before the source pad or display latency.

GstShark's framerate tracer reported output FPS from the final processing element's source pad at approximately one-second intervals; the first and last interval of each run were excluded. FPS, processing time, CPU load, GPU utilization, and power entries are the arithmetic mean of the two run means. Interlatency mean and 95th percentile use the combined steady-state frames from both runs.

tegrastats sampled every 250 ms. The first and last sample of each run were excluded. CPU load is the sum of per-core percentages divided by 100, expressed as fully utilized core equivalents. GPU is the GR3D_FREQ utilization reported by tegrastats. Power is the VIN_SYS_5V0 system rail reading; it includes CPU, memory transfers, and other active components, so it does not isolate PVA consumption.

ISP Output to fakesink

This pipeline measures Bayer upload and ISP processing without a display or encoder:

GST_TRACERS='framerate;proctime;interlatency' GST_DEBUG='GST_TRACER:7' GST_DEBUG_NO_COLOR=1 \
gst-launch-1.0 -q \
    multifilesrc location=80.raw loop=true stop-index=0 num-buffers=800 ! \
    'video/x-bayer,format=bggr,bpp=12,width=1920,height=1080,framerate=30/1' ! \
    pvacudaupload ! pvaisp params=params-reference.yaml ! \
    'video/x-raw,format=NV12,width=1920,height=1080' ! \
    fakesink sync=false

The output FPS is reported from pvaisp0_src. Proc Avg values come from GstShark's proctime records for the named elements.

Power mode Resolution FPS Avg pvaisp Proc Avg (ms) pvacudaupload Proc Avg (ms) CPU load (cores) GPU Avg (%) VIN_SYS_5V0 (W)
MAXN 1920 × 1080 (FHD) 133.67 5.51 0.77 0.52 0.1 5.57
MAXN 3840 × 2160 (4K) 39.83 18.83 2.50 0.37 0.0 5.71
MODE_50W 1920 × 1080 (FHD) 88.25 9.37 0.79 0.35 0.6 5.35
MODE_50W 3840 × 2160 (4K) 24.77 34.01 2.46 0.23 0.0 5.44
MODE_30W 1920 × 1080 (FHD) 70.28 12.33 0.70 0.32 0.0 5.30
MODE_30W 3840 × 2160 (4K) 19.79 45.55 2.13 0.17 0.0 5.46
MODE_15W 1920 × 1080 (FHD) 44.80 19.98 0.74 0.27 0.0 5.08
MODE_15W 3840 × 2160 (4K) 12.21 74.94 2.89 0.16 0.0 5.03

ISP Output Converted to NVMM

This pipeline adds queue and nvvidconv to produce video/x-raw(memory:NVMM),format=NV12. The queue allows ISP and conversion work to overlap, so individual element processing times must not be added to infer output rate or end-to-end latency.

GST_TRACERS='framerate;proctime;interlatency' GST_DEBUG='GST_TRACER:7' GST_DEBUG_NO_COLOR=1 \
gst-launch-1.0 -q \
    multifilesrc location=80.raw loop=true stop-index=0 num-buffers=800 ! \
    'video/x-bayer,format=bggr,bpp=12,width=1920,height=1080,framerate=30/1' ! \
    pvacudaupload ! pvaisp params=params-reference.yaml ! \
    'video/x-raw,format=NV12,width=1920,height=1080' ! \
    queue ! nvvidconv ! 'video/x-raw(memory:NVMM),format=NV12' ! \
    fakesink sync=false

The output FPS is reported from the conversion element's source pad, nvvconv0_src. For 4K runs, use num-buffers=240, the 3840 × 2160 input frame, and width=3840,height=2160 in both caps filters.

Power mode Resolution FPS Avg pvaisp Proc Avg (ms) pvacudaupload Proc Avg (ms) nvvidconv Proc Avg (ms) CPU load (cores) GPU Avg (%) VIN_SYS_5V0 (W)
MAXN 1920 × 1080 (FHD) 133.33 5.54 0.75 5.43 1.23 0.0 5.78
MAXN 3840 × 2160 (4K) 39.33 19.00 2.44 17.52 1.03 0.0 5.98
MODE_50W 1920 × 1080 (FHD) 88.29 9.42 0.74 6.92 0.96 0.0 5.52
MODE_50W 3840 × 2160 (4K) 24.86 34.06 2.41 24.24 0.83 0.0 5.63
MODE_30W 1920 × 1080 (FHD) 69.72 12.37 0.69 6.98 0.77 0.0 5.43
MODE_30W 3840 × 2160 (4K) 19.16 45.73 2.50 22.59 0.63 0.0 5.53
MODE_15W 1920 × 1080 (FHD) 44.10 20.15 0.74 6.78 0.56 0.0 5.05
MODE_15W 3840 × 2160 (4K) 12.12 75.36 3.01 25.23 0.46 0.0 5.10

Source-to-Sink Interlatency

This is the measured time for a buffer to travel from the file source's output pad to the fakesink input pad. It is a pipeline buffer latency, not camera-to-display or glass-to-glass latency. Both paths include pvacudaupload and pvaisp; the NVMM path also includes the queue and nvvidconv. P95 means that 95% of the measured steady-state frames had latency at or below the listed value.

Power mode Resolution ISP output mean (ms) ISP output P95 (ms) NVMM output mean (ms) NVMM output P95 (ms)
MAXN 1920 × 1080 (FHD) 6.43 6.59 12.07 12.37
MAXN 3840 × 2160 (4K) 21.50 21.76 39.36 40.16
MODE_50W 1920 × 1080 (FHD) 10.32 10.42 17.45 17.68
MODE_50W 3840 × 2160 (4K) 36.66 36.82 61.09 62.95
MODE_30W 1920 × 1080 (FHD) 13.18 13.43 20.40 20.75
MODE_30W 3840 × 2160 (4K) 47.80 48.33 71.24 75.30
MODE_15W 1920 × 1080 (FHD) 20.90 21.12 28.05 28.63
MODE_15W 3840 × 2160 (4K) 78.01 78.36 104.03 105.13

At MAXN, the ISP-output pipeline produced 133.67 FPS at 1080p and 39.83 FPS at 4K. Its mean source-to-sink latencies were 6.43 ms and 21.50 ms, respectively. These file-fed rates and latencies do not predict live-camera or glass-to-glass performance.

Idle Power

Idle VIN_SYS_5V0 power was sampled for five seconds in each mode without a benchmark pipeline. Subtracting idle from loaded power does not isolate PVA consumption.

Power mode Idle VIN_SYS_5V0 (W)
MAXN 4.45
MODE_50W 4.45
MODE_30W 4.45
MODE_15W 4.25

ISP Latency Measurements

Latency measurements were performed using RidgeRun's PVA ISP GStreamer element on NVIDIA Jetson platforms to characterize the behavior of the complete ISP pipeline under different operating conditions and power configurations. Measurements focus on two complementary metrics:

  • Glass-to-Glass Latency, representing the latency perceived by the end user from image acquisition to image presentation (live camera capture to display).
  • GStreamer Pipeline Latency, representing the latency introduced by the complete pvaisp element inside a multimedia pipeline.

Together, these measurements provide visibility into:

  • Real-world camera-to-display latency.
  • The impact of Jetson power profiles.
  • The effect of PVA clock frequency on image processing performance.
  • Resolution scaling behavior.
  • Multimedia pipeline integration performance.


Information
The GStreamer pipeline, power, and latency measurements in this section were obtained using an ASIP Programmer-compiled PVA ISP. These results were collected separately from the compiler comparison above.


Evaluated Power Modes

The number of active CPU cores and PVA frequencies depend on the selected power mode.

Power Mode Active CPU Cores PVA VPU Frequency (MHz) PVA AXI Frequency (MHz)
MAXN 12 1369.9 985.6
MODE_50W 12 307.2 217.6
MODE_30W 8 512 358.4
MODE_15W 4 307.2 217.6
MODE_15W_PVA_MAX 4 1369.9 985.6

The number of active cores influences the overall SoM consumption.

The MODE_15W_PVA_MAX power mode is explained below.

Custom PVA-Oriented Power Profiles

One of the evaluated profiles is a custom profile and is not part of the default Jetson AGX Orin power configuration.

This profile was created because the default 15W nvpmodel preset does not provide direct control over the PVA frequency ranges needed for this evaluation, particularly when minimising the power consumption of the SoM while maximising the PVA usage.

  • MODE_15W_PVA_MAX

To reproduce the experiments, add the following power profiles to:

/etc/nvpmodel.conf

MODE_15W_PVA_MAX

< POWER_MODEL ID=4 NAME=MODE_15W_PVA_MAX >
CPU_ONLINE CORE_0 1
CPU_ONLINE CORE_1 1
CPU_ONLINE CORE_2 1
CPU_ONLINE CORE_3 1
CPU_ONLINE CORE_4 0
CPU_ONLINE CORE_5 0
CPU_ONLINE CORE_6 0
CPU_ONLINE CORE_7 0
CPU_ONLINE CORE_8 0
CPU_ONLINE CORE_9 0
CPU_ONLINE CORE_10 0
CPU_ONLINE CORE_11 0
TPC_POWER_GATING TPC_PG_MASK 248
GPU_POWER_CONTROL_ENABLE GPU_PWR_CNTL_EN on
CPU_A78_0 MIN_FREQ 729600
CPU_A78_0 MAX_FREQ 1113600
GPU MIN_FREQ 0
GPU MAX_FREQ 408000000
GPU_POWER_CONTROL_DISABLE GPU_PWR_CNTL_DIS auto
EMC MAX_FREQ 2133000000
DLA0_CORE MAX_FREQ 614400000
DLA1_CORE MAX_FREQ 614400000
DLA0_FALCON MAX_FREQ 294400000
DLA1_FALCON MAX_FREQ 294400000
PVA0_VPS MAX_FREQ 1369600000
PVA0_AXI MAX_FREQ 985600000

Activate the profile:

#Change ID for the one that you want
sudo nvpmodel -m 4

Verify the active profile:

sudo nvpmodel -q

The custom profiles used in this evaluation prioritize PVA performance while operating under reduced system power budgets.

Glass-to-Glass Latency

Important
These metrics are under review. They will be released soon


GStreamer Pipeline Latency

This section evaluates the processing performance of GStreamer pipelines using PVA ISP on NVIDIA Jetson Orin and NVIDIA Jetson Thor.

The benchmarks measure frame rate, processing time, CPU utilization, GPU utilization, and system power consumption under different pipeline configurations.

Two input methodologies are evaluated:

  • NVIDIA Jetson Orin: Live camera capture using rrv4l2src, evaluated at 1920×1080 (FHD) and 3840×2160 (4K) across multiple power modes.
  • NVIDIA Jetson Thor: A static RAW image (imx274.raw) repeatedly supplied using imagefreeze or multifilesrc, evaluated at 1920×1080 with target frame rates of 30 and 60 FPS.

Both platforms are evaluated with and without display output to examine the processing overhead introduced by additional pipeline elements.

Note: The Orin and Thor benchmarks use different input sources, RAW formats, pipeline elements, and hardware configurations. Their results represent platform-specific measurements rather than directly comparable hardware performance benchmarks.

Benchmark Metrics

The following metrics are collected during benchmark execution:

Metric Description
Resolution Input image resolution processed by the pipeline.
Power Mode Jetson power profile used during the benchmark.
Target FPS Requested frame rate configured for the benchmark.
FPS Avg Average number of frames processed per second.
Proc Avg (ms) Average processing time per frame reported by the benchmark instrumentation.
CPU Load Avg (cores) Average aggregate CPU utilization, expressed as equivalent active CPU cores.
GPU Avg (%) Average GPU utilization reported during the benchmark.
Avg Power (W) Average system power consumption reported during the benchmark.

The reported processing times represent the measurements obtained from the corresponding benchmark instrumentation. They should not be interpreted as complete capture-to-display latency unless the measurement interval explicitly covers the entire pipeline.

NVIDIA Jetson Orin

The Orin benchmarks use live camera capture through rrv4l2src.

Three scenarios are evaluated:

  1. Live capture without PVA ISP, using fakesink.
  2. Live capture with PVA ISP, using fakesink.
  3. Live capture with PVA ISP, using display output.

The benchmarks are performed at two resolutions:

  • 4K: 3840×2160.
  • FHD: 1920×1080.

The following power modes are evaluated:

  • MAXN
  • MODE_50W
  • MODE_30W
  • MODE_15W_PVA_MAX
  • MODE_15W

The display manager is stopped before running the benchmarks:

sudo systemctl stop display-manager

The following pipelines are used:

WIDTH=3840
HEIGHT=2160

# Case 1 (baseline): v4l2src without pvaisp directly to fakesink
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v rrv4l2src device=/dev/video0 io-mode=mmap ! "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" ! queue ! fakesink

# Case 2: v4l2src and pva isp without display using fakesink instead
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v   rrv4l2src device=/dev/video0 io-mode=userptr !   "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" !   pvaisp params=pva_isp_params.yaml !   'video/x-raw,format=NV12' ! queue  !  fakesink

# Case 3: v4l2src and pva isp to display output
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v   rrv4l2src device=/dev/video0 io-mode=userptr !   "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" !   pvaisp params=pva_isp_params.yaml !   'video/x-raw,format=NV12' !  queue ! nvvidconv ! autovideosink sync=0


Notice
PVA ISP is allocated in one VPU (out of two). The raw performance of PVA supports two parallel streams at the same framerate as presented below.


Case 1: Live Capture without PVA ISP

This case establishes the baseline performance of live camera capture without PVA ISP processing.

The captured Bayer frames are sent directly to fakesink.

Pipeline:

WIDTH=3840
HEIGHT=2160

#Case 1: v4l2src without pva isp directly to fakesink
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v \
    rrv4l2src device=/dev/video0 io-mode=mmap ! \
    "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" ! \
    queue ! \
    fakesink

Results:

Power Mode Resolution FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
MAXN 3840×2160 (4K) 61.48 0.00 0.0139/12 0.00 4.69
1920×1080 (FHD) 59.60 0.00 0.0167/12 0.00 4.52
MODE_50W 3840×2160 (4K) 59.70 0.00 0.0264/12 0.00 4.70
1920×1080 (FHD) 60.72 0.00 0.288/12 0.00 4.53
MODE_30W 3840×2160 (4K) 61.41 0.00 0.0282/8 0.00 4.70
1920×1080 (FHD) 59.79 0.00 0.0264/8 0.00 4.52
MODE_15W_PVA_MAX 3840×2160 (4K) 61.38 0.00 0.02/4 0.00 4.50
1920×1080 (FHD) 59.66 0.00 0.0209/4 0.00 4.32
MODE_15W 3840×2160 (4K) 60.97 0.00 0.0194/4 0.00 4.50
1920×1080 (FHD) 60.83 0.00 2.24/4 0.00 4.32

The figures in bold represent points of comparison of the maximum performance mode vs the minimum + maximum PVA clocks.

Case 2: PVA ISP without Display Output

This case measures live camera capture with PVA ISP processing while excluding display rendering.

The input Bayer frames are processed by pvaisp, converted to NV12, and sent to fakesink.

Pipeline:

WIDTH=3840
HEIGHT=2160

# Case 2: v4l2src and pva isp without display using fakesink instead
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v \
    rrv4l2src device=/dev/video0 io-mode=userptr ! \
    "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" ! \
    pvaisp params=pva_isp_params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue ! \
    fakesink

Results:

Power Mode Resolution FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
MAXN 3840×2160 (4K) 34.24 26.797 0.2297/12 0.00 5.85
1920×1080 (FHD) 61.57 7.890 0.2058/12 0.00 5.24
MODE_50W 3840×2160 (4K) 9.75 101.695 0.0833/12 0.00 5.08
1920×1080 (FHD) 35.00 27.638 0.1724/12 0.00 5.07
MODE_30W 3840×2160 (4K) 13.79 71.084 0.1012/8 0.00 5.24
1920×1080 (FHD) 48.24 19.641 0.2191/8 0.00 5.16
MODE_15W_PVA_MAX 3840×2160 (4K) 28.04 33.927 5.29/4 0.00 5.52
1920×1080 (FHD) 61.50 10.224 6.61/4 0.00 5.07
MODE_15W 3840×2160 (4K) 8.52 116.790 1.83/4 0.00 4.86
1920×1080 (FHD) 31.24 31.092 4.61/4 0.00 4.81

The figures in bold represent points of comparison of the maximum performance mode vs the minimum + maximum PVA clocks.

Case 3: PVA ISP with Display Output

This case evaluates the live camera pipeline with PVA ISP processing and display output.

The pipeline includes nvvidconv and autovideosink to display the processed frames.

Pipeline:

WIDTH=3840
HEIGHT=2160

#Case 3: v4l2src and pva isp to display output
GST_TRACERS='framerate;proctime' \
GST_DEBUG='GST_TRACER:7' \
gst-launch-1.0 -v \
    rrv4l2src device=/dev/video0 io-mode=userptr ! \
    "video/x-bayer,format=rggb,bpp=10,width=${WIDTH},height=${HEIGHT}" ! \
    pvaisp params=pva_isp_params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue ! \
    nvvidconv ! \
    autovideosink sync=0

Results:

Power Mode Resolution FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
MAXN 3840×2160 (4K) 31.38 29.49 0.6324/12 13.39 6.25
1920×1080 (FHD) 61.00 8.96 0.6321/12 6.55 5.56
MODE_50W 3840×2160 (4K) 8.34 116.12 0.1842/12 3.64 5.24
1920×1080 (FHD) 31.68 31.11 0.2888/12 3.61 5.23
MODE_30W 3840×2160 (4K) 13.59 70.51 0.2897/8 5.21 5.50
1920×1080 (FHD) 48.83 19.51 0.4433/8 4.88 5.43
MODE_15W_PVA_MAX 3840×2160 (4K) 26.45 34.71 0.6673/4 16.33 5.95
1920×1080 (FHD) 60.32 10.28 0.6121/4 7.36 5.39
MODE_15W 3840×2160 (4K) 8.41 115.89 0.2291/4 3.88 5.07
1920×1080 (FHD) 30.86 31.56 0.3718/4 4.09 5.03

The figures in bold represent points of comparison of the maximum performance mode vs the minimum + maximum PVA clocks.

Performance Comparison

After comparing case 1 with case 2, it is possible to compute the difference between the CPU load and the power drawn by PVA ISP:

Power Mode Resolution Processing Time
(ms)
Additional Power
Consumption (W)
MAXN 3840x2160 (4K) 26.797 1.16
1920x1080 (FHD) 7.89 0.72
MODE 15W PVA MAX 3840x2160 (4K) 33.927 1.02
1920x1080 (FHD) 10.224 0.75

In 1080p, the power consumption by a single stream is 0.75 W, whereas for 4K is 1.16 W. This includes a full ISP pipeline, as described in Complete Pipeline.

Additionally, all these figures are retrieved for a single stream. Nevertheless, PVA ISP is using the 50% of the PVA, leaving room to introduce another stream while maintaining the performance. After three streams, the PVA shall share VPU amongst two or more streams.

NVIDIA Jetson Thor

The Jetson Thor benchmarks evaluate PVA ISP performance using a static RAW image instead of a live camera.

The input file is imx274.raw, containing a 1920×1080 RAW image with a frame size of 4,147,200 bytes.

Two input approaches are evaluated:

  • Test 1 — imagefreeze: A single RAW image is loaded and repeatedly output at a configured frame rate.
  • Test 2 — multifilesrc: The same RAW image is continuously read in a loop to simulate a video input.

The benchmarks use MAXN power mode and evaluate target frame rates of 30 and 60 FPS.

The PVA ISP pipelines use the following elements:

  • rawvideoparse to interpret the input data.
  • capssetter to assign Bayer caps.
  • pvacudaupload to prepare the input for PVA processing.
  • pvaisp to execute the ISP pipeline.
  • perf to collect performance measurements.
  • fakesink or autovideosink as the output sink.

The PVA ISP input caps specify RGGB Bayer data with 12 bits per pixel, and the output format is NV12.

Benchmark Configuration

The same GStreamer pipelines are used to evaluate PVA ISP performance at 30 and 60 FPS.

The frame rate is configured through the FPS variable. No additional pipeline modifications are required between the two tests.

Configuration for 60 FPS:

WIDTH=1920
HEIGHT=1080
FPS=60

Configuration for 30 FPS:

FPS=30

All pipeline caps that specify a frame rate use framerate=${FPS}/1.

Each benchmark is executed separately for both target frame rates, and the corresponding results are reported in the tables below.

Test 1: Static RAW Image with imagefreeze

This test uses imagefreeze to repeatedly output a single RAW image at the configured frame rate.

Three scenarios are evaluated:

  1. RAW image without PVA ISP, using fakesink.
  2. RAW image processed by PVA ISP, using fakesink.
  3. RAW image processed by PVA ISP, using display output.
Case 1: RAW Image without PVA ISP

The baseline pipeline measures frame delivery without PVA ISP processing.

Pipeline:

WIDTH=1920
HEIGHT=1080
FPS=60

gst-launch-1.0 -v \
    filesrc location=imx274.raw blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=1/1 ! \
    imagefreeze is-live=true ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    perf ! \
    fakesink sync=true

To run the 30 FPS benchmark, set FPS=30 before executing the same pipeline.

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 59.99 0.00 0.170 0 19.30
1920×1080 MAXN 30 0.00 0

Note: The 30 FPS baseline row contains incomplete measurements in the original benchmark record.

The baseline pipeline achieves approximately 60 FPS without PVA ISP processing.

Case 2: PVA ISP without Display Output

This pipeline processes the repeated RAW image using PVA ISP and sends the NV12 output to fakesink.

Pipeline:

WIDTH=1920
HEIGHT=1080
FPS=60

gst-launch-1.0 -v \
    filesrc location=imx274.raw blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=1/1 ! \
    imagefreeze is-live=true ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    capssetter replace=true join=false \
        caps="video/x-bayer,format=rggb,bpp=12,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    pvacudaupload ! \
    pvaisp params=examples/params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    perf ! \
    fakesink sync=true

To run the 30 FPS benchmark, set FPS=30 before executing the same pipeline.

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 60.34 7.40 2.700 0 21.40
1920×1080 MAXN 30 30.56 7.51 0.156 0 20.14

The PVA ISP pipeline achieves approximately 60 FPS with an average processing time of 7.40 ms.

The measured processing time remains close to 7.5 ms for the 30 FPS test.

Case 3: PVA ISP with Display Output

This test uses the same PVA ISP pipeline but replaces fakesink with autovideosink.

Pipeline:

WIDTH=1920
HEIGHT=1080
FPS=60

gst-launch-1.0 -v \
    filesrc location=imx274.raw blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=1/1 ! \
    imagefreeze is-live=true ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    capssetter replace=true join=false \
        caps="video/x-bayer,format=rggb,bpp=12,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    pvacudaupload ! \
    pvaisp params=examples/params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    perf ! \
    autovideosink sync=true

To run the 30 FPS benchmark, set FPS=30 before executing the same pipeline.

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 60.53 7.40 2.310 0 21.20
1920×1080 MAXN 30 30.91 7.65 0.180 0 21.09

The display pipeline achieves approximately 60 FPS with an average processing time of 7.40 ms.

The reported processing time is similar to the fakesink configuration.

Test 2: Repeated RAW Image with multifilesrc

This test uses multifilesrc with loop=true to repeatedly read the same RAW image and simulate a continuous video input.

Unlike imagefreeze, which repeats an already loaded frame, multifilesrc continuously supplies the RAW image as input buffers.

Three scenarios are evaluated:

  1. RAW image without PVA ISP, using fakesink.
  2. RAW image processed by PVA ISP, using fakesink.
  3. RAW image processed by PVA ISP, using display output.

All benchmarks use the MAXN power mode at 1920×1080 resolution.

The same pipelines are used for 30 and 60 FPS by changing the FPS variable.

Benchmark configuration:

WIDTH=1920
HEIGHT=1080
FPS=60

# For 30 FPS:
# FPS=30
Case 1: RAW Image without PVA ISP

This case establishes the baseline performance of the multifilesrc pipeline without PVA ISP processing.

The RAW image is repeatedly read, assigned Bayer caps, and sent directly to fakesink.

Pipeline:

gst-launch-1.0 -v \
    multifilesrc location=imx274.raw loop=true blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=${FPS}/1 ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    capssetter replace=true join=false \
        caps="video/x-bayer,format=rggb,bpp=12,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    perf ! \
    fakesink sync=true

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 60.11 0.00 0.055 0 17.59
1920×1080 MAXN 30 30.247 0.00 0.085 0 15.30

The baseline pipeline maintains the configured frame rates without PVA ISP processing.

The reported processing time is 0.00 ms because the pipeline does not execute the PVA ISP processing stage. This value should not be interpreted as zero end-to-end pipeline latency.

Case 2: PVA ISP without Display Output

This case evaluates PVA ISP processing using the repeated RAW image as input.

The input is processed by pvaisp, converted to NV12, and sent to fakesink.

Pipeline:

gst-launch-1.0 -v \
    multifilesrc location=imx274.raw loop=true blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=${FPS}/1 ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    capssetter replace=true join=false \
        caps="video/x-bayer,format=rggb,bpp=12,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    pvacudaupload ! \
    pvaisp params=examples/params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    perf ! \
    fakesink sync=true

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 60.16 7.33 0.311 0 21.33
1920×1080 MAXN 30 30.11 7.39 0.058 0 20.20

The PVA ISP pipeline maintains the configured frame rates with an average processing time of:

  • 60 FPS: 7.33 ms.
  • 30 FPS: 7.39 ms.

The measured processing time remains similar at both frame rates.

Case 3: PVA ISP with Display Output

This case evaluates the same PVA ISP pipeline with display output.

The processed NV12 frames are sent to autovideosink instead of fakesink.

Pipeline:

gst-launch-1.0 -v \
    multifilesrc location=imx274.raw loop=true blocksize=4147200 ! \
    rawvideoparse format=gray16-le \
        width=${WIDTH} height=${HEIGHT} framerate=${FPS}/1 ! \
    "video/x-raw,format=GRAY16_LE,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    capssetter replace=true join=false \
        caps="video/x-bayer,format=rggb,bpp=12,width=${WIDTH},height=${HEIGHT},framerate=${FPS}/1" ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    pvacudaupload ! \
    pvaisp params=examples/params.yaml ! \
    'video/x-raw,format=NV12' ! \
    queue max-size-buffers=4 max-size-bytes=0 max-size-time=0 ! \
    perf ! \
    autovideosink sync=true

Results:

Resolution Power Mode Target FPS FPS Avg Proc Avg (ms) CPU Load Avg (cores) GPU Avg (%) Avg Power (W)
1920×1080 MAXN 60 60.06 7.38 0.311 0 21.37
1920×1080 MAXN 30 30.082 7.64 0.201 0 20.27

The pipeline maintains the configured frame rates with an average processing time of:

  • 60 FPS: 7.38 ms.
  • 30 FPS: 7.64 ms.

The processing time remains close to the results obtained without display output.




Cookies help us deliver our services. By using our services, you agree to our use of cookies.